<?php
/*
	Creado:
		Autor: Betti Nicolas
		E-mail: nicolas_betti@yahoo.com.ar
		Fecha: 1-9-2007:
		Desc: Controlador para los usuarios del sistema
			Los usuarios que puede haber son dos:
				- Coordinador docente
					Es el encargado de administrar los usurios
				- Secretario Administrativo
					No tiene privilegios sobre los usuarios
*/
	class UsersController extends AppController
	{
	
		var $helpers = array('html', 'form','time','javascript'); 
		var $layout='menu';
		var $cacheAction = false;
		 var $namedArgs = TRUE;
	         var $argSeparator = "="; 
	          
		// Filtro para el obtener los atributos que vienen del get
	        var $beforeFilter = array('getNamedArgs'); 
		
			
		/*	
		Creado:
			Autor		: Betti Nicolas
			Fecha:		: 1-8-2007
			Desc		: Funcion para encriptar el password
			Aclaracion	: El fragmento de codigo de encriptar el password fue elaborado 
					  por otro alumno, no por el autor de la funcion.
		*/
		function encriptarPassword() {
			$Security = new Security();
			$passSeguro = $Security->hash($this->data['User']['password']);
			$this->data['User']['password'] = $passSeguro;
		}
		
		/*
		Creado:
			Autor		: Betti Nicolas
			Fecha		: 1-8-2007
			Desc		: Metodo para agregar o editar los datos de un usuario
			Pos Condicion	: El usuario tiene que ser de tipo Coordinador docente
		*/
		function add($user_name = ''){
			if ($this->Session->read('usrEsCoordinador')!=1){
				//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
				$this->redirect('/index');
			}
			$this->set('size',20);
			
			if ($user_name == '')
				$this->set('action',"add");
				else // Se esta editando al usuario
				{
					$this->set('action',"edit");
					$user = $this->User->find("username='".$user_name."'");
					$this->set('user',$user);
				}
				
			if (!empty($this->data)){
				if (!$this->isUserExist()){
					// Se encripta el password 
					$this->encriptarPassword();
	
					// Se guarda el usuario
					$this->User->save($this->data['User']);
					$this->redirect('/users/index');
				}
				else
					$this->render();
			}
			
			
		}
		
				/*
		Creado:
			Autor		: Betti Nicolas
			Fecha		: 1-8-2007
			Desc		: Metodo para actualizar los datos de un usuario
			Pos Condicion	: El usuario tiene que ser de tipo Coordinador docente
		*/
		function update(){
			if ($this->Session->read('usrEsCoordinador')!=1){
				//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
				$this->redirect('/index');
			}
			$this->encriptarPassword();
			$this->User->set($this->data['User']);
			$this->User->save();
			$this->redirect('/users/index');
		}
		
		
		function index(){
			if ($this->Session->read('usrEsCoordinador')!=1){
				//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
				$this->redirect('/index');
			}
		 if (isset($this->namedArgs['name']))
                        {
	                       if (isset($this->namedArgs['accion']))
	                       {
	                           
	                            $name     = $this->namedArgs['name'];
	                            $accion = $this->namedArgs['accion'];
	                            if ($accion=="del")				// Se tiene que borrar a una persona
	                                    $this->User->del($name);
	                            else if ($accion=="edit")			// Se tiene que editar a una persona
	                                    $this->redirect("/users/add/$name");     
	                        }
                        } 
		 	$this->pageTitle = 'Usuario';
                        $this->set('usuarios', $this->User->findAll());
		}
		
		
	function login(){
			$this->pageTitle = "Login";
			$this->Session->write('noLogin', '1'); //PARA QUE NO MUESTRE LOGOUT EN EL MENU
			$this->set('loginInvalido', 'false');
			if (!empty($this->data)){
				//HAY DATOS DE LOGIN, VERIFICO SI EXISTE EN LA BASE
				$usuario = $this->data['User']['username'];
				$pass = $this->data['User']['password'];
				$Security = new Security();
				$passSeguro = $Security->hash($pass);
				$conditions = array("User.username" => $usuario);
				$result = $this->User->find($conditions,array('User.password', 'User.tipo_usuario'));
				$passEnBase = $result['User']['password'];
				$esCoord = $result['User']['tipo_usuario'];
//				$this->Session->write('usuariosession', 'prueba'); //LOGUEO SIEMPRE
				if ($passEnBase == $passSeguro) {
					$this->Session->write('noLogin', '0'); //PARA QUE NO MUESTRE LOGIN EN EL MENU
					$this->Session->write('usuariosession', $usuario);
					$this->Session->write('usrEsCoordinador', $esCoord);
					if (($this->Session->read('redirectURL') != '')) {
						//HABIA RUTA A DONDE IR, REDIRECCIONO
						$this->redirect($this->Session->read('redirectURL'));
					} else {
						//SI NO HAY RUTA A DONDE IR VOY AL INDEX
						$this->redirect('/index');
					}
				} else {
					//MAL EL USUARIO O PASSWORD
					$this->set('loginInvalido', 'true');
					$this->data['User']['password'] = '';
				}					
			} else {
				//NO HAY DATOS, MUESTRO EL LOGIN
				if (isset($this->params['redirectURL'])){
					$this->Session->write('redirectURL', $this->params['redirectURL']);
					$this->set('redirectURL', $this->params['redirectURL']);
				} else {
					$this->Session->write('redirectURL', '');
				}
			}
		}			
		
	function logout(){
			$this->Session->write('noLogin', '1');
			$this->Session->delete('usuariosession');
			$this->Session->delete('usrEsCoordinador');
			$this->redirect('/');
	}
	
	
	// Me da los parametro que vienen por GET
        function getNamedArgs() {
                if ($this->namedArgs)
                {
                    $this->namedArgs = array();
                    if (!empty($this->params['pass']))
                    {
                        foreach ($this->params['pass'] as $param)
                        {
                            if (strpos($param, $this->argSeparator))
                            {
                                list($name, $val) = split( $this->argSeparator, $param );
                                $this->namedArgs[$name] = $val;
                            }
                        }
                    }
                }
                return TRUE;
        } 
        
        
          function isUserExist(){
	                $usuario = $this->User->find("username='".$this->data['User']['username']."'");
	                if ($usuario){
	                	//Error porque el nombre de usuario ya existe
	                	$this->set('action','edit');
	                	$this->set('error','Error: El nombre de usuario ya existe, cambielo por favor');
	                	$this->set("user",$this->data);
	                	return true;   
			}
			return false;
               
                }
        
        
	}

?>